//package com.itheima.redis;
//
//
//
//
//import com.itheima.pojo.User;
//import org.junit.jupiter.api.Test;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.boot.test.context.SpringBootTest;
//import org.springframework.data.redis.connection.DataType;
//import org.springframework.data.redis.core.*;
//
//import java.time.LocalDateTime;
//import java.util.Arrays;
//import java.util.List;
//import java.util.Map;
//import java.util.Set;
//import java.util.concurrent.TimeUnit;
//
//@SpringBootTest
//public class TestRedis {
//
//    @Autowired
//    RedisTemplate redisTemplate;
//
//
//    @Test
//    public void StrTest(){
//        ValueOperations valueOperations = redisTemplate.opsForValue();
//        valueOperations.set("username","tom");
//        String username = (String) valueOperations.get("username");
//        System.out.println(username);
//    }
//
//
//    /**
//     * redisTemplate的json序列化
//     * **/
//    @Test
//    public void testSerializer(){
//        User user = User.builder()
//                .id(100L)
//                .birthday(LocalDateTime.now())
//                .name("德玛")
//                .hobbys(Arrays.asList("足球", "篮球", "羽毛球"))
//                .build();
//        //存值
//        redisTemplate.opsForValue().set("user",user);
//        //取值
//        User u = (User) redisTemplate.opsForValue().get("user");
//        System.out.println(u);
//
//    }
//
//
//    /**
//     * 操作字符串类型的数据
//     * **/
//    @Test
//    public void testString(){
//        //操作字符串
//        ValueOperations operations = redisTemplate.opsForValue();
//        //保存键值对
//        operations.set("name1","小黑子");
//        //根据键取值
//        System.out.println(operations.get("name"));
//        //设置过期时间，5分钟有效
//        operations.set("code","123456",5,TimeUnit.MINUTES);
//        //当键不存在才能设置成功
//        System.out.println(operations.setIfAbsent("lock","1"));
//        System.out.println(operations.setIfAbsent("lock","2"));
//    }
//
//
//
//    /**
//     * 操作哈希类型的数据
//     */
//    @Test
//    public void testHash(){
//      //操作hash
//        HashOperations hashOperations = redisTemplate.opsForHash();
//        //添加字段和值
//        hashOperations.put("user01","name","tom");
//        hashOperations.put("user01","age","20");
//
//        //根据键取值
//        System.out.println(hashOperations.get("user01","name"));
//        //获取所有的key
//        Set keys = hashOperations.keys("user01");
//        System.out.println(keys);
//
//        //获取所有的value
//        List values = hashOperations.values("user01");
//        System.out.println(values);
//
//        //删除指定的字段
//        hashOperations.delete("user01","age");
//        //获取所有的键值对
//        Map user01 = hashOperations.entries("user01");
//        Set set = user01.keySet();
//        for (Object key : set) {
//            System.out.println("key="+key+",value="+user01.get(key));
//        }
//    }
//
//    /**
//     * 操作列表类型的数据
//     */
//    @Test
//    public void testList(){
//       //操作list
//        ListOperations listOperations = redisTemplate.opsForList();
//        //列表中添加元素
//        listOperations.leftPushAll("mylist","a","b","c");
//        listOperations.leftPush("mylist","d");
//        //获取列表中全部元素
//        List mylist = listOperations.range("mylist", 0, -1);
//        System.out.println(mylist);
//        //从右侧删除元素并返回
//        Object ele = listOperations.rightPop("mylist");
//        System.out.println(ele);
//        //获取列表长度
//        Long size = listOperations.size("mylist");
//        System.out.println("size: "+size);
//
//    }
//
//
//    /**
//     * 操作集合类型的数据
//     */
//
//    @Test
//    public void testSet(){
//       //操作set集合
//        SetOperations setOperations = redisTemplate.opsForSet();
//        //set集合添加 成员
//        setOperations.add("set1","a","b","c");
//        setOperations.add("set2","b","c","d");
//        //获取集合中所有成员
//        Set set1 = setOperations.members("set1");
//        System.out.println("成员: "+set1);
//
//        //获取集合中成员个数
//        Long size = setOperations.size("set1");
//        System.out.println("set1成员数量:"+size);
//
//        //集合操作:交集
//        Set intersect = setOperations.intersect("set1", "set2");
//        System.out.println("交际:"+intersect);
//        //操作集合:并集
//        Set union = setOperations.union("set1", "set2");
//        System.out.println("并集: "+union);
//    }
//
//    /**
//     * 操作有序集合类型的数据
//     */
//    @Test
//    public void testZset(){
//      //操作有序集合
//        ZSetOperations zSetOperations = redisTemplate.opsForZSet();
//        //有序集合添加成员
//        zSetOperations.add("zSet","tom",10);
//        zSetOperations.add("zSet","jack",5);
//        zSetOperations.add("zSet","lily",20);
//        //查询成员分数
//        System.out.println("查询成员jack分数: "+zSetOperations.score("zSet","jack"));
//        //有序集合大小
//        System.out.println("集合大小:"+zSetOperations.size("zSet"));
//        //根据索引范围获取有序集合成员
//        Set members = zSetOperations.range("zSet", 0, -1);
//        System.out.println("有序集合成员: "+members);
//        //给指定成员加分
//        Double score = zSetOperations.incrementScore("zSet", "tom", 2);
//        System.out.println("加分后结果: "+score);
//        //删除成员
//        zSetOperations.remove("zSet","tom","jack");
//    }
//
//
//
//
//    /**
//     * 通用命令操作
//     */
//    @Test
//    public void testCommon(){
//       //获取所有的key
//        Set keys = redisTemplate.keys("*");
//        //判断指定key是否存在
//        Boolean exist = redisTemplate.hasKey("name");
//        System.out.println(exist);
//        //判断键对应的value的类型
//        DataType type = redisTemplate.type("zSet");
//        System.out.println("zSet类型:"+type);
//        //key的过期时间
//        redisTemplate.opsForValue().set("name","jack",5,TimeUnit.MINUTES);
//        Long expire = redisTemplate.getExpire("name");
//        System.out.println("剩余过期时间(秒): "+expire);
//        //跟进key删除数据
//        redisTemplate.delete("set1");
//    }
//
//
//
//}